package com.ruoyi.file.controller;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.system.api.domain.SysFile;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件请求处理
 *
 * @author ruoyi
 */
@RestController
public class SysFileController {

  private static final Logger log = LoggerFactory.getLogger(SysFileController.class);

  @Resource
  private ISysFileService sysFileService;

  /**
   * 通用文件上传请求
   */
  @PostMapping("upload/keepName")
  public R<SysFile> uploadKeepName(MultipartFile file) {
    return doUploadFile(file, true);
  }

  /**
   * 通用文件上传请求
   */
  @PostMapping("upload")
  public R<SysFile> upload(MultipartFile file) {
    return doUploadFile(file, false);
  }

  /**
   * 头像文件上传请求
   */
  @PostMapping("uploadAvatar")
  public R<SysFile> uploadAvatar(MultipartFile file) {
    return doUploadFile(file, false);
  }


  /**
   * 配置文件上传请求
   */
  @PostMapping("uploadConfig")
  public R<SysFile> uploadConfig(MultipartFile file) {
    return doUploadFile(file, false);
  }

  /**
   *
   * @param file     文件
   * @param keepName 是否保持文件名建议通常设置成false,避免覆盖
   * @return 文件信息
   */
  private R<SysFile> doUploadFile(MultipartFile file, boolean keepName) {
    try {
      // 上传并返回访问地址
      String url = sysFileService.uploadFile(file, keepName);
      SysFile sysFile = new SysFile();
      sysFile.setName(FileUtils.getName(url));
      sysFile.setUrl(url);
      return R.ok(sysFile);
    } catch (Exception e) {
      log.error("上传文件失败", e);
      return R.fail(e.getMessage());
    }
  }
}